/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Gestionequipo;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import javax.swing.JOptionPane;
import gestionJDBC.*;
import gestionJugadores.*;
import gestionpistas.*;


/**
 *
 * @author Adrian
 */
public class EquipoFundacionDB {
    
        private static gestorJDBC gestor = gestorJDBC.getInstance();
                

        public ArrayList <EquipoFundacion> getEquipoFundacion(String nombre){
            
            ArrayList<EquipoFundacion> eqi = new ArrayList<EquipoFundacion>();   
            
            gestor.Conectar();
            
            ResultSet rs = null;
            ResultSet rs2 = null;

            rs = gestor.Consultar("SELECT equipo.id_equipo,equipo.nombre,equipo_fundacion.entrenamiento, equipo_funadcion.alta "
                                    + "FROM equipo, equipo_fundacion where equipo_fundacion.alta = 1 and"
                                    + "equipo.id_equipo = equipo_fundacion.id_equipo and equipo.nombre='"+ nombre + "'");
            
            int i = 0;
     
            try{
                
                while(rs.next()){
                    
                    eqi.add(new EquipoFundacion());
                    eqi.get(i).SetId((Integer)rs.getObject("id_equipo"));
                    eqi.get(i).SetNombre(rs.getObject("nombre").toString());
                    eqi.get(i).SetEntrenamiento(rs.getObject("entrenamiento").toString());
                    eqi.get(i).SetId((Integer)rs.getObject("alta"));
                    
                    rs2 = gestor.Consultar("SELECT * from jugador,inscrito where jugador.id_jugador = inscrito.id_jugador and"
                                            + " inscrito.alta=1 and inscrito.id_equipo ='"+ eqi.get(i).GetId());
                    
                    try{
                        
                      
                        while(rs2.next()){
                            
                            Jugador j = new Jugador();
                            j.setId_jugador((Integer) rs2.getObject("id_jugador"));
                            j.setNombre(rs2.getObject("nombre").toString());
                            j.setApellido1(rs2.getObject("apellido1").toString());
                            j.setApellido2(rs2.getObject("apellido2").toString());
                            j.setFecha_nacimiento(rs2.getObject("fecha_nacimiento").toString());
                            j.setAltura((Double) rs2.getObject("altura"));
                            j.setDomicilio(rs2.getObject("domicilio").toString());
                            j.setLocalidad(rs2.getObject("localidad").toString());
                            j.setCodigo_postal((Integer) rs2.getObject("codigo_postal"));
                            j.setProvincia(rs2.getObject("provincia").toString());
                            j.setTalla(rs2.getObject("talla").toString());
                            j.setAlta(rs2.getObject("alta").toString());
                            j.setColegio(rs2.getObject("colegio").toString());
                            j.setEquipo_ant(rs2.getObject("equipo_ant").toString());
                            j.setRopa(rs2.getObject("ropa").toString());
                            
                            eqi.get(i).SetJugador(j);
                            
                        }
                    
                    }catch(SQLException e ){
                        
                                JOptionPane.showMessageDialog(null,"Error al obtener los jugadores de un equipo\n"
                                + e.getMessage());
                    }


                    i++;
                
                }
                

            }catch(SQLException e ){
                JOptionPane.showMessageDialog(null,"Error al obtener los equipos\n"
                                + e.getMessage());
            }
            
            gestor.Desconectar();
            
            return eqi;
        }
      
        
        
        public boolean AsociarJugadorEquipoFundacion( Jugador j, EquipoFundacion f){
            
            boolean confirmacion;
        
            gestor.Conectar();
            
            confirmacion = gestor.Insertar("INSERT INTO Inscrito (id_jugador,id_equipo,alta) "
                                            + "VALUES ('"+ j.getId_jugador() + "'," 
                                            + f.GetId() + ",1)");
                
            gestor.Desconectar();
        
            return confirmacion;
            
                        
            
        }

        public boolean CrearEquipoFundacion(EquipoFundacion eq, Pista p){
            
            boolean confirmacion;
            
            Integer cant;
            cant = 0;

            gestor.Conectar();

            /* Consultamos el maximo id de los equipos que se encuentra en la fundacion */
            ResultSet rs2 =gestor.Consultar("SELECT max(id_equipo) AS max_id FROM Equipo fundación");

            try {

                rs2.next();
                cant=(Integer)rs2.getObject("max_id");

            } catch (SQLException e) {
                
                
                cant = -1;

                JOptionPane.showMessageDialog(null, "Fallo al intentar conseguir el id del nuevo equipo\n"+e.getMessage());
            }

            //Aumentamos en 1 el id
            cant++;

            if(cant>0){
                
                
                confirmacion = gestor.Insertar("INSERT INTO Equipo fundación (id_equipo,entrenamiento,alta) "
                                                + "VALUES ('" + cant  + "','" + eq.GetEntrenamiento()
                                                + "'," + eq.GetAlta() + ")");
                
            } else {
                
                confirmacion = false;
            }
            
            if(confirmacion){
                
            
                confirmacion = gestor.Insertar("INSERT INTO Equipo(id_equipo,nombre) "
                                                + "VALUES ('" + cant  + "','" + eq.GetNombre() + "')");
                
            }
            
            if(confirmacion){
                
                confirmacion = gestor.Insertar("INSERT INTO Usa (id_equipo,id_pista) "
                                                + "VALUES ('" + cant  + "','" + p.getid_pistas() + "')");
                
            }
 
            gestor.Desconectar();
            
            return confirmacion;
            
            
        }

        public boolean DarBajaEquipoFundacion(Integer id){
            
            
            boolean confirmacion;

            gestor.Conectar();

            confirmacion = gestor.Modificar("UPDATE Equipo fundación SET alta=0 WHERE id_equipo="+id+")");

            gestor.Desconectar();

            return confirmacion;
        
        }

        public boolean setEquipoFundacion(EquipoFundacion e, Pista p){
            
            
            boolean confirmacion;

            gestor.Conectar();

            confirmacion = gestor.Modificar("UPDATE Equipo fundación SET entrenamiento=" + e.GetEntrenamiento() 
                                            + ", nombre='"+ e.GetNombre() + "' WHERE id_equipo="+ e.GetId());
            
            
            if(confirmacion){
                
                confirmacion = gestor.Modificar("UPDATE Usa SET id_pista='" + p.getid_pistas() 
                                                + "' WHERE id_equipo="+ e.GetId());
            }

            gestor.Desconectar();

            return confirmacion;
            
        }

        public ArrayList <EquipoFundacion>getEquiposLibres(String nombre){
            
            ArrayList<EquipoFundacion> eqi = new ArrayList<EquipoFundacion>();   
            
            //Agrupado(id_equipo, id_grupo, valido): así sabremos que equipos se pueden enfrentar entre ellos y organizar así las clasificaciones.
            gestor.Conectar();
            
            ResultSet rs = null;
            ResultSet rs2 = null;

            rs= gestor.Consultar("SELECT e.id_equipo,e.nombre,ef.alta,ef.entrenamiento from"
                                + " equipo e,equipo_fundacion ef where not exists (Select agrupado.id_equipo from agrupado)");
            
            int i = 0;
            
            try{
                
                while(rs.next()){
                    
                    eqi.add(new EquipoFundacion());
                    eqi.get(i).SetId((Integer)rs.getObject("id_equipo"));
                    eqi.get(i).SetNombre(rs.getObject("nombre").toString());
                    eqi.get(i).SetEntrenamiento(rs.getObject("entrenamiento").toString());
                    eqi.get(i).SetId((Integer)rs.getObject("alta"));
                    
                    rs2 = gestor.Consultar("SELECT * from jugador,inscrito where inscrito.alta=1 and jugador.id_jugador = inscrito.id_jugador and"
                                            + " inscrito.id_equipo ='"+ eqi.get(i).GetId());
                    
                    try{
                        
                      
                        while(rs2.next()){
                            
                            Jugador j = new Jugador();
                            j.setId_jugador((Integer) rs2.getObject("id_jugador"));
                            j.setNombre(rs2.getObject("nombre").toString());
                            j.setApellido1(rs2.getObject("apellido1").toString());
                            j.setApellido2(rs2.getObject("apellido2").toString());
                            j.setFecha_nacimiento(rs2.getObject("fecha_nacimiento").toString());
                            j.setAltura((Double) rs2.getObject("altura"));
                            j.setDomicilio(rs2.getObject("domicilio").toString());
                            j.setLocalidad(rs2.getObject("localidad").toString());
                            j.setCodigo_postal((Integer) rs2.getObject("codigo_postal"));
                            j.setProvincia(rs2.getObject("provincia").toString());
                            j.setTalla(rs2.getObject("talla").toString());
                            j.setAlta(rs2.getObject("alta").toString());
                            j.setColegio(rs2.getObject("colegio").toString());
                            j.setEquipo_ant(rs2.getObject("equipo_ant").toString());
                            j.setRopa(rs2.getObject("ropa").toString());
                            
                            eqi.get(i).SetJugador(j);
                            
                        }
                    
                    }catch(SQLException e ){
                        
                                JOptionPane.showMessageDialog(null,"Error al obtener los jugadores de un equipo\n"
                                + e.getMessage());
                    }

                    i++;
                
                }
                

            }catch(SQLException e ){
                JOptionPane.showMessageDialog(null,"Error al obtener los equipos\n"
                                + e.getMessage());
            }
            
            return eqi;
        
        }
        
        public Integer crearEquipo(String nombre){
            
            gestor.Conectar();
            
            boolean confirmacion = gestor.Insertar("INSERT INTO Equipo(nombre) "
                                                   + "VALUES ('" + nombre + "')");
            
            if(confirmacion==false){
                return null;
            }
            
            Integer cant=null;
            
             /* Consultamos el maximo id de los equipos que se encuentra en la fundacion */
            ResultSet rs2 =gestor.Consultar("SELECT max(id_equipo) AS max_id FROM equipo");

            try {

                rs2.next();
                cant=(Integer)rs2.getObject("max_id");

            } catch (SQLException e) {
                
                
                cant = -1;

                JOptionPane.showMessageDialog(null, "Fallo al intentar conseguir el id del nuevo equipo\n"+e.getMessage());
            }
            
                
             gestor.Desconectar();


             return cant;
        }

        public boolean BajaJugadorEquipo(Integer idj, Integer ide){
            
            boolean confirmacion;

            gestor.Conectar();

            confirmacion = gestor.Modificar("UPDATE inscrito SET alta=0 WHERE id_jugador="+idj+" and id_equipo=" + ide);

            gestor.Desconectar();

            return confirmacion;
            
        }

}
